//
// Created by 123 on 2024/3/19.
//
#include <iostream>
#include <queue>

using namespace std;


/**
 *
 * 课本定义方法
 *

#define MaxVertexNum 100
//顶点对应数据类型
typedef char VertexType;
//边对应数据类型
typedef int EdgeType;
typedef struct {
//    顶点表
    VertexType vex[MaxVertexNum];
//    边表
    EdgeType edge[MaxVertexNum][MaxVertexNum];
//    图的当前顶点数和边数
    int vexnum;
    int arcnum;
};


 *
 */

#define MaxSize 8
int grap[MaxSize][MaxSize]= {
        {0, 1, 0, 0, 1, 0, 0, 0},
        {1, 0, 0, 0, 0, 1, 0, 0},
        {0, 0, 0, 1, 0, 1, 1, 0},
        {0, 0, 1, 0, 0, 0, 1, 1},
        {1, 0, 0, 0, 0, 0, 0, 0},
        {0, 1, 1, 0, 0, 0, 1, 0},
        {0, 0, 1, 1, 0, 1, 0, 1},
        {0, 0, 0, 1, 0, 0, 1, 0},
    };
bool isVisited[MaxSize]={false,false,false,false,false,false,false,false};
//    1  {0, 1, 0, 0, 1, 0, 0, 0},
//    2  {1, 0, 0, 0, 0, 1, 0, 0},
//    3  {0, 0, 0, 1, 0, 1, 1, 0},
//    4  {0, 0, 1, 0, 0, 0, 1, 1},
//    5  {1, 0, 0, 0, 0, 0, 0, 0},
//    6  {0, 1, 1, 0, 0, 0, 1, 0},
//    7  {0, 0, 1, 1, 0, 1, 0, 1},
//    8  {0, 0, 0, 1, 0, 0, 1, 0},

void bfs(int vex){
    cout<<vex<<"   ";
    isVisited[vex-1]= true;
    queue<int> que;
    que.push(vex-1);
    while (!que.empty()){
        int curV=que.front();
        que.pop();
        for (int i = 0; i <MaxSize ; ++i) {
            if(grap[curV][i]==1&&!isVisited[i]){
                cout<<i+1<<"   ";
                isVisited[i]= true;
                que.push(i);
            }
        }
    }
    cout<<endl;
}

void bfs_puls(int vex){
    queue<int> que;
    que.push(vex-1);
    isVisited[vex-1]= true;
    while (!que.empty()){
        int curV=que.front();
        que.pop();
        cout<<curV+1<<"   ";
        for (int i = 0; i <MaxSize ; ++i) {
            if(grap[curV][i]==1&&!isVisited[i]){
                isVisited[i]= true;
                que.push(i);
            }
        }
    }
    cout<<endl;
}


int main() {

    bfs(2);

//    bfs_puls(2);
}















